(*

Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2003 Miranda ICQ/IM project,
all portions of this codebase are copyrighted to the people
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*)

{$IFNDEF M_OPTIONS}
{$DEFINE M_OPTIONS}

const

    {
        wParam : addinfo
        lParam : 0
        Affects: The user opened the options dialog, see notes
        Notes  : Modules should do whatever initalisation they need and call
                 MS_OPT_ADDPAGE with the wParam -- MS_OPT_ADDPAGE
                 can be called one or more times
                 if more than one page wants to be displayed.
    }
    ME_OPT_INITIALISE           = 'Opt/Initialise';

    {
        wParam : wParam from ME_OPT_INITIALISE
        lParam : Pointer to an initialised TOPTIONSDIALOGPAGE
        Affects: Adds a page to the options dialog, see notes
        Notes  : Strings in the structure can be released as soon as the
                 service returns -- but icons must be kept around, this iss
                 not a problem if you're loading theem from a resource.
                 -
                 This service should only be called within the ME_OPT_INITIALISE
                 event hook.
                 -
                 Pages in the options dialog operate just like pages in property
                 sheets, See the WinAPI documentation for details on how they operate.
        Version: Prior to v0.1.2.1 the options dialog would resize
                 to fit the largest page, but since then it's a fixed size
                 The largest page that fits neatly is 314x240 DLU's
                 -
                 Some of OPTIONSDIALOGPAGE's fields are version dependant.
    }
    MS_OPT_ADDPAGE                  = 'Opt/AddPage';

    { defacto size }

    OPTIONSDIALOGPAGE_V0100_SIZE    = $18;
    OPTIONSDIALOGPAGE_V0120_SIZE    = $28;

    { page is only shown when in 'simple' mode }
    ODPF_SIMPLEONLY                 = 1;
    { page is only shown when in 'expert' mode }
    ODPF_EXPERTONLY                 = 2;
    { give group box titles a bold font }
    ODPF_BOLDGROUPS                 = 4;

type

    POPTIONSDIALOGPAGE = ^TOPTIONSDIALOGPAGE;
    TOPTIONSDIALOGPAGE = record
        cbSize: int;
        position: int;                  // position number, lower numbers are top most
        pszTitle: PChar;
        pfnDlgProc: Pointer;            // DLGPROC prototype
        pszTemplate: PChar;
        hInstance: THandle;
        hIcon: THandle;                 // v0.1.0.1+
        pszGroup: PChar;                // v0.1.0.1+
        groupPosition: int;             // v0.1.0.1+
        hGroupIcon: THandle;            // v0.1.0.1+
        flags: DWORD;                   // v0.1.2.1+
        { if in simple mode the dialog will be cut off AFTER this control ID, 0
        for disable }
        nIDBottomSimpleControl: int;    // v0.1.2.1+
        { if in simple mode the dialog will cut off AFTER this control ID, 0 to disable }
        nIDRightSimpleControl: int;     // v0.1.2.1+
        { these controls will be hidden in simple mode, pointer to an array of ID's
        must remain valid for the duration of the dialog }
        expertOnlyControls: ^int;
        nExpertOnlyControls: int;       // v0.1.2.1+
    end;

const

    { sent to pages via WM_NOTIFY when the expert checkbox is clicked, lParam = new state }
    PSN_EXPERTCHANGED               = 2;
    { returns true/false }
    PSM_ISEXPERT                    = ($0400 + 101);
    { returns HFONT used for group box titles }
    PSM_GETBOLDFONT                 = ($0400 + 102);

{$ENDIF}
